package DesignPattern.SimpleFactory;



import java.util.Optional;

/**
 * @author : LdLtd
 * @Date : 2023/12/11
 * @Description:ifelse重构为工厂模式
 *
 *  * 简单工厂模式
 *  * 优点：
 *  *
 *  * 通过一个简单工厂类将客户端调用和具体对象生成两个过程进行解耦
 *  * 客户端只需要决定参数，简单工厂便根据参数决定返回哪一个对象
 *  * 缺点：
 *  *
 *  * 多引入一个工厂类，增加代码复杂度
 *  * 违背开闭原则，当需要新增一个产品时，不经要新增一个产品具体实现，并新增对应的工厂及实现
 */
public class FactoryMode {
    //if else写法
    public int calculate(int a,int b,String operator){
        int res=Integer.MAX_VALUE;
        if("add".equals(operator)){
            res=a+b;
        }else if("multiply".equals(operator)){
            res=a*b;
        }else if("divide".equals(operator)){
            res=a/b;
        }else if("subtract".equals(operator)){
            res=a-b;
        }
        return res;
    }
    public int calculateFactory(int a,int b,String operator){
        Optional<Operation> operationOptional=OperatorFactory.getOperation(operator);
        if(operationOptional.isPresent()){
            Operation operation = operationOptional.get();
            return operation.getResult(a,b);
        }else {
            throw  new IllegalArgumentException("非法操作:"+operator);
        }
    }

    public static void main(String[] args) {
        FactoryMode factoryMode = new FactoryMode();
        System.out.println(factoryMode.calculateFactory(1, 0, "divide"));
    }


}
